package cz.vse.adventura.po1715.xburj54_bursa.hra;

import cz.vse.adventura.po1715.xburj54_bursa.hra.Kapsa;
import cz.vse.adventura.po1715.xburj54_bursa.hra.APříkaz;

/*******************************************************************************
 * Instance třídy {@code PříkazPřečti} představuje příkaz,
 * kterým hráč zjišťuje více informací o předmětu.
 *
 * @author Jan Bursa
 * @version 1.02,  16.12.2010
 */
public class PříkazProzkoumej extends APříkaz
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================

    /** Příznak toho, že hráč prozkoumal bundu. */
    static boolean BUNDA_PROZKOUMANA = false;

//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Vytvoří instanci mající na strosti reakci na příkaz <b>prozkoumej</b>,
     * po jehož zadaní hráč prozkoumá předmět,
     * jehož název bude uveden za příkazem.
     */
    public PříkazProzkoumej()
    {
        super( "Prozkoumej",
               "Prozkoumá zadaný objekt");
    }

//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================

    /***************************************************************************
     * Vypíše hráči informace o zadaném předmětu, který je v aktuální místnosti,
     * před tím však zkontroluje, zda je vůbec zadán předmět, který se má
     * prozkoumat a zda tento předmět je v aktuální místnosti.
     * Nemá-li předmět další důležité informace, oznámí, že předmět není potřeba zkoumat.
     *
     * @param parametry parametrem jsou vybrané předměty
     * @return Text zpravy vypsane po porovedeni prikazu
     */
    @Override
    public String execute( String... parametry )
    {
        if (parametry.length == 0) {
            return "Není zadán předmět, který se má prozkoumat";
        }
        String predmet = parametry[0];
        if (( ! predmet.equalsIgnoreCase("Bunda"))&&
            ( ! predmet.equalsIgnoreCase("Dveře"))&&
            ( ! predmet.equalsIgnoreCase("Obraz"))&&
            ( ! predmet.equalsIgnoreCase("Plot"))&&
            ( ! predmet.equalsIgnoreCase("Rohožka"))&&
            ( ! predmet.equalsIgnoreCase("Umyvadlo"))&&
            ( ! predmet.equalsIgnoreCase("Trezor")))
           {
             return "Zadaný předmět není potřeba zkoumat";
        }
        Místnost am = Místnost.getAktuálníMístnost();
        Předmět predmet2mistnost = (Předmět)Kapsa.najdi(predmet,
                          am.getObjects());
        if (predmet2mistnost == null)  {
            return "Předmět " + predmet + " není v aktuální místnosti";
        }
        /*Bunda*/
        if (( predmet.equalsIgnoreCase("Bunda")) &&
            (BUNDA_PROZKOUMANA))    {
            return "Bundu už není potřeba dále zkoumat";
        }
        if ( predmet.equalsIgnoreCase("Bunda")) {
            BUNDA_PROZKOUMANA = true;
            am.poloz(Předmět.KLÍČEK);  //přidat do předmětů klíček
             return "Prozkoumal(a) jste bundu. Z bundy vypadl Klíček";
        }
        /*Dveře*/
        if (( predmet.equalsIgnoreCase("Dveře")) &&
                (PříkazPoužij.DVERE_ODEMCENY)) {
            return "Dveře jsou otevřené a už není potřeba je dále zkoumat";
        }
        if ( predmet.equalsIgnoreCase("Dveře")) {
            return "Prozkoumal(a) jste dveře. Vedou do Předsíně. Jsou však zamčené";
        }

        /*Obraz*/
        if (( predmet.equalsIgnoreCase("Obraz")) &&
                (PříkazSundej.OBRAZ_SUNDAN)) {
            return "Obraz už není potřeba dále zkoumat";
        }
        if ( predmet.equalsIgnoreCase("Obraz")) {
            return "Prozkoumal(a) jste obraz. Je celkem velký."+
                   "\nZdá se však, že nesedí přímo na zdi a je mezí ním mezera ";
        }

        /*Plot*/
        if (( predmet.equalsIgnoreCase("Plot")) &&
                (PříkazPoužij.DRAT_USTIPNUT)) {
            return "Plot už není potřeba dále zkoumat";
        }
        if ( predmet.equalsIgnoreCase("Plot")) {
             return "Prozkoumal(a) jsi plot. Z plotu kouká kus drátu. Ten by se mohl hodit";
        }
        /*Rohožka*/
        if (( predmet.equalsIgnoreCase("Rohožka")) &&
                (PříkazOdsuň.ROHOZKA_ODSUNUTA)) {
            return "Rohožku už není potřeba dále zkoumat";
        }
        if ( predmet.equalsIgnoreCase("Rohožka")) {
             return "Prozkoumal(a) jsi rohožku. Rohožka je na jednom místě mírně vyvýšená";
        }

        /*Umyvadlo*/
        if (( predmet.equalsIgnoreCase("Umyvadlo")) &&
            (PříkazPoužij.KAMINEK_VYNDAN))    {
            return "Umyvadlo už není potřeba dále zkoumat";
        }
        if ( predmet.equalsIgnoreCase("Umyvadlo")) {
             return "Prozkoumal(a) jsi umyvadlo. V odpadu umyvadla se něco leskne";
        }

        /*Trezor*/
        if (( predmet.equalsIgnoreCase("Trezor")) &&
                (PříkazOtevři.TREZOR_OTEVREN)) {
            return "Trezor už není potřeba dále zkoumat";
        }
        if ( predmet.equalsIgnoreCase("Trezor")) {
             return "Prozkoumal(a) jsi trezor. Je zde klíčová dírka a malý otvor." +
             "\n Bohužel zde chybí klička na otevírání. Jsou tu pouze 2 dirky od šroubků.";
        }
        return "";
    }

//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== VNOŘENÉ A VNITŘNÍ TŘÍDY ===================================================
//== TESTY A METODA MAIN =======================================================
//
//    /***************************************************************************
//     * Testovací metoda.
//     */
//    public static void test()
//    {
//        PříkazProzkoumej x = new PříkazProzkoumej();
//    }
//    /** @param args Parametry příkazového řádku - nepoužívané. */
//    public static void main( String[] args )  {  test();  }
}
